home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / dwpdemo / dwp_main.c < prev    next >
C/C++ Source or Header  |  1997-07-10  |  6KB  |  215 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)dwp_main.c    V1.10    3/15/95";
  3. #endif
  4.  
  5.  
  6. /*------------------------------------------------------------------
  7. | file name -- dwp_main.c
  8. |-----------------------------------------------------------------*/
  9.  
  10. #include "std.h"
  11. #include "dvstd.h"
  12. #include "dvtools.h"
  13. #include "Tfundecl.h"
  14. #include "dvGR.h"
  15. #include "dwp_vars.h"
  16. #include "VUfundecl.h"
  17. #include "VOfundecl.h"
  18. #include "GRfundecl.h"
  19. #include "dwp_fundecl.h"
  20. #include "MISCfuns.h"
  21.  
  22. #ifdef WINNT
  23. #include <windows.h>
  24. #endif /* WINNT */
  25.  
  26.  
  27. #ifndef WINNT 
  28.  
  29. /* Include the X based files so we can add AppTimeOuts */
  30. #ifdef CONST
  31. #undef CONST
  32. #endif
  33.  
  34. #ifndef __STDC__
  35. #define _NO_PROTO
  36. #endif
  37.  
  38. /* X11 include files */
  39. #include <X11/Xlib.h>
  40. #include <X11/Intrinsic.h>
  41. #endif /* Not WINNT */
  42.  
  43. /* This program can be linked to run:
  44. |
  45. |  With 100% CPU usage (which shows updates in a tight loop)
  46. |    comment #define DV_USE_TIMER
  47. |  With Time-Outs (which show update based on a timer.
  48. |    uncomment #define DV_USE_TIMER
  49. */
  50. #define DV_USE_TIMER 
  51.  
  52. #ifdef DV_USE_TIMER
  53. LOCAL unsigned int TimeoutInterval = 100;
  54. #ifdef WINNT
  55. LOCAL HWND Hwnd;
  56. LOCAL VOID CALLBACK TimeOutProc V_P_((HWND hwnd,
  57.                                        UINT uMsg,
  58.                                        UINT idEvent,
  59.                                        DWORD dwTime));
  60. #else /*UNIX*/
  61.  
  62. LOCAL XtAppContext app_context;
  63. LOCAL VOID UpdateProc V_P_((ADDRESS args, XtIntervalId *interval_id));
  64. #endif /* WINNT */
  65. #endif /* DV_USE_TIMER */
  66.  
  67.  
  68. #define SEARCH_PATH     (CHAR*)NULL
  69. #define DISPFORM_TABLE  (CHAR*)NULL
  70.  
  71.  
  72. /*------------------------------------------------------------------------
  73. |  main()
  74. |       This program was written as a demo for the Los Angeles Department
  75. |       of Water and Power. The code has been rewritten using much of
  76. |       the same code as the other DataViews 9.1 demos.
  77. |       The program shows the following functionality:
  78. |               1) Pick an object and bring up a new window.
  79. |               2) Pick an object and perform a function.
  80. |               2) Transfer data between windows (by rebinding variables).
  81. |               3) Update only the dynamic objects on the screen.
  82. |               4) Add and delete the dynamics of specific objects.
  83. |               5) Handle window events.
  84. |
  85. |---------------------------------------------------------------------------
  86. */
  87.  
  88. #ifdef WINNT 
  89. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  90.                      LPSTR lpCmdLine,  int nCmdShow  )
  91. {
  92.     INT argc;
  93.     CHAR **argv;
  94.     OBJECT location;
  95.  
  96.     make_argv(&argc,&argv,GetCommandLine());
  97.  
  98. #else  /* Not WINNT */
  99. int 
  100. main (argc, argv)
  101.      int argc;
  102.      char *argv[];
  103. {
  104.   OBJECT location;
  105.  
  106. #endif /* WINNT */
  107.  
  108.  
  109.   /* Initialize arguments */
  110.   if (argc > 1)
  111.     Device = argv[1];
  112.  
  113.   /* Initialize */
  114.   VUoff_copyright ();
  115.   TInit (SEARCH_PATH, DISPFORM_TABLE);  /* DataViews Initialization */
  116.  
  117.   /* Initialize the model and displays */
  118.   InitApplication ();           /* found in dwp_model.c */
  119.   InitWindow (MAIN);            /* found in dwp_dsp.c */
  120.  
  121. #ifdef DV_USE_TIMER
  122. #ifdef WINNT
  123.     /* Get the Windows based information */
  124.     (VOID) GRget (V_WIN32_WINDOW_HANDLE, &Hwnd, V_END_OF_LIST);
  125.     
  126.  /* Post a timeout for dynamic updates
  127.   |  The timeout procedure will update the dynamics of
  128.   |  all screens which have been opened. The procedure is invoked
  129.   |  whenever the specified time interval elapses. The interval is
  130.   |  specified in milliseconds.
  131.   */
  132.     SetTimer (Hwnd, (UINT)Hwnd, TimeoutInterval, (TIMERPROC)TimeOutProc);
  133. #else /* UNIX */
  134.   /* Extract the X information so we can setup a Time-Out Proc
  135.   |  for updating....
  136.   |     Get the Xt Application Context information.
  137.   |     Post a timeout procedure will update the dynamics of
  138.   |     all screens which have been opened. The procedure is invoked
  139.   |     whenever the specified time interval elapses. The interval is
  140.   |     specified in milliseconds.
  141.   */
  142.   (VOID) GRget (V_X_APPLIC_CONTEXT, &app_context, V_END_OF_LIST);
  143.   XtAppAddTimeOut (app_context, TimeoutInterval, 
  144.            (XtTimerCallbackProc) UpdateProc, NULL);
  145. #endif /* Not WINNT */
  146. #endif /* DV_USE_TIMER */
  147.  
  148.   /* Control Loop */
  149.   QuitStatus = (DV_BOOL) NO;
  150.  
  151.   while (QuitStatus == NO)
  152.     {
  153.  
  154. #ifdef DV_USE_TIMER
  155.       /* Gather and Process User Inputs
  156.       |    Note: since we posted a time-out, the event
  157.       |    handler will call our function to handle
  158.       |    the updating of dynamic objects.
  159.       */
  160.       location = VOloWinEventPoll (V_WAIT);
  161.  
  162. #else  /* Not DV_USE_TIMER */
  163.       /* Update the Display */
  164.       HandleDynamics();
  165.       
  166.       /* Get the Event */
  167.       location = VOloWinEventPoll( V_NO_WAIT );
  168.  
  169. #endif /* DV_USE_TIMER */
  170.  
  171.       if (location)
  172.         /* Gather and Process User Inputs */
  173.         HandleEvents (location);         /* found in dwp_events.c */
  174.     }
  175.  
  176.   /* Termination and Clean Up */
  177.   TermDisplays ();              /* found in dwp_dsp.c */
  178.   TermData ();                  /* found in dwp_rebind.c */
  179.   TTerminate ();                /* DataViews Termination */
  180.  
  181.   exit( EXIT_OK );
  182.   return 1;
  183. }
  184.  
  185. #ifdef DV_USE_TIMER
  186. #ifdef WINNT
  187. /*ARGSUSED*/
  188. LOCAL VOID CALLBACK
  189. TimeOutProc (hwnd, uMsg, idEvent, dwTime)
  190.     HWND hwnd;
  191.   UINT uMsg;
  192.     UINT idEvent;
  193.     DWORD dwTime;
  194. {
  195.     HandleDynamics ();
  196. }
  197.  
  198. #else /* UNIX */
  199. /*ARGSUSED*/
  200. LOCAL void 
  201. UpdateProc (args, interval_id)
  202.      ADDRESS args;
  203.      XtIntervalId *interval_id;
  204. {
  205.  
  206.   /* Gather and Process Data */
  207.   HandleDynamics ();            /* found in c4i_dyn.c */
  208.  
  209.   /* Re-Post the Time-Out */
  210.   XtAppAddTimeOut (app_context, TimeoutInterval, 
  211.            (XtTimerCallbackProc) UpdateProc, NULL);
  212. }
  213. #endif /* Not WINNT */
  214. #endif /* DV_USE_TIMER */
  215.